Systems and method for providing video-on-demand services for broadcasting systems

ABSTRACT

A method for sending data to a client to provide data-on-demand services comprises the steps of: receiving a data file, specifying a time interval, parsing the data file into a plurality of data blocks based on the time interval such that each data block is displayable during a time interval, determining a required number of time slots to send the data file, allocating to each time slot at least a first of the plurality of data blocks and optionally one or more additional data blocks, such that starting from any of the time slots, (i) the data file can be displayed by accessing the first of the plurality of data blocks; (ii) at a consecutive time slot, a next data block sequential to a prior displayed data block is available for displaying; and (iii) repeating step (ii) until all of the plurality of data blocks for the data file has been displayed, and sending the plurality of data blocks based on the allocating step.

CROSS REFERENCES RELATED TO APPLICATION

[0001] This application is a divisional application of U.S. Ser. No.09/584,832 filed on May 31, 2000 by Khoi Hoang.

BACKGROUND OF THE INVENTION

[0002] Video-on-demand (VOD) systems are one type of data-on-demand(DOD) systems. In VOD systems, video data files are provided by a serveror a network of servers to one or more clients on a demand basis.

[0003] In a conventional VOD architecture, a server or a network ofservers communicates with clients in a standard hierarchicalclient-server model. For example, a client sends a request to a serverfor a data file (e.g., a video data file). In response to the clientrequest, the server sends the requested data file to the client. In thestandard client-server model, a client's request for a data file can befulfilled by one or more servers. The client may have the capability tostore any received data file locally in non-volatile memory for lateruse. The standard client-server model requires a two-way communicationsinfrastructure. Currently, two-way communications require building newinfrastructure because existing cables can only provide one-waycommunications. Example of two-way communications infrastructure arehybrid fiber optics coaxial cable (HFC) or all fiber infrastructure.Replacing existing cables is very costly and the resulting services maynot be affordable by most users.

[0004] In addition, the standard client-server model has manylimitations when a service provider (e.g., a cable company) attempts toprovide VOD services to a large number of clients. One limitation of thestandard client-server model is that the service provider has toimplement a mechanism to continuously listen and fulfill every requestfrom each client within the network; thus, the number of clients who canreceive service is dependent on the capacity of such a mechanism. Onemechanism uses massively-parallel computers having large and fast diskarrays as local servers. However, even the fastest existing local servercan only deliver video data streams to about 1000 to 2000 clients at onetime. Thus, in order to service more clients, the number of localservers must increase. Increasing local servers requires more upperlevel servers to maintain control of the local servers.

[0005] Another limitation of the standard client-server model is thateach client requires its own bandwidth. Thus, the total requiredbandwidth is directly proportional to the number of subscribing clients.Cache memory within local servers has been used to improve bandwidthlimitation but using cache memory does not solve the problem becausecache memory is also limited.

[0006] Presently, in order to make video-on-demand services moreaffordable for clients, existing service providers are increasing theratio of clients per local server above the local server's capabilities.Typically, a local server, which is capable of providing service to 1000clients, is actually committed to service 10,000 clients. This techniquemay work if most of the subscribing clients do not order videos at thesame time. However, this technique is set up for failure because mostclients are likely to want to view videos at the same time (i.e.,evenings and weekends), thus, causing the local server to becomeoverloaded.

[0007] Thus, it is desirable to provide a system that is capable ofproviding on-demand services to a large number of clients over virtuallyany transmission medium without replacing existing infrastructure.

SUMMARY OF THE INVENTION

[0008] In an exemplary embodiment, at a server side, a method forsending data to a client to provide data-on-demand services comprisesthe steps of: receiving a data file, specifying a time interval, parsingthe data file into a plurality of data blocks based on the time intervalsuch that each data block is displayable during the time interval,determining a required number of time slots to send the data file,allocating to each time slot at least a first of the plurality of datablocks and optionally one or more additional data blocks, such that theplurality of data blocks is available in sequential order to a clientaccessing the data file during any time slot, and sending the pluralityof data blocks based on the allocating step. In one embodiment, theparsing step includes the steps of: determining an estimated data blocksize, determining a cluster size of a memory in a channel server, andparsing the data file based on the estimated data block size and thecluster size. In another embodiment, the determining step includes thestep of assessing resource allocation and bandwidth availability.

[0009] In an exemplary embodiment, at a client side, a method forprocessing data received from a server to provide data-on-demandservices comprises the steps of: (a) receiving a selection of a datafile during a first time slot; (b) receiving at least one data block ofthe data file during a second time slot; (c) during a next time slot:receiving any data block not already received, sequentially displaying adata block of the data file, and repeating step (c) until all datablocks of the data file has been received and displayed. In oneembodiment, the method for processing data received from a server isperformed by a set-top box at the client side.

[0010] In an exemplary embodiment, a data file is divided into a numberof data blocks and a scheduling matrix is generated based on the numberof data blocks. At the server side, the scheduling matrix provides asend order for sending the data blocks, such that a client can accessthe data blocks in sequential order at a random time. In an exemplaryembodiment, a method for generating a scheduling matrix for a data filecomprises the steps of: (a) receiving a number of data blocks [x] for adata file; (b) setting a first variable [j] to zero; (c) setting asecond variable [i] to zero; (d) clearing all entries in a referencearray; (e) writing at least one data block stored in matrix positions ofa column [(i+j) modulo x] in a matrix to a reference array, if thereference array does not already contain the data block; (f) writing adata block [i] into the reference array and a matrix position [(i+j)modulo x, j] of the matrix, if the reference array does not contain thedata block [i]; (g) incrementing the second variable [i] by one andrepeating step (e) until the second variable [i] is equal to the numberof data blocks [x]; and (h) incrementing the first variable [j] by oneand repeating the step (c) until the first variable [j] is equal to thenumber of data blocks [x]. In one embodiment, a scheduling matrix isgenerated for each data file in a set of data files and a convolutionmethod is applied to generate a delivery matrix based on the schedulingmatrices for sending the set of data files.

[0011] A data-on-demand system comprises a first set of channel servers,a central controlling server for controlling the first set of channelservers, a first set of up-converters coupled to the first set ofchannel servers, a combiner/amplifier coupled to the first set ofup-converters, and a combiner/amplifier adapted to transmit data via atransmission medium. In an exemplary embodiment, the data-on-demandsystem further comprises a channel monitoring module for monitoring thesystem, a switch matrix, a second set of channel servers, and a secondset of up-converters. The channel monitoring module is configured toreport to the central controlling server when system failure occurs. Thecentral controlling server, in response to report from the channelmonitoring module, instructs the switch matrix to replace a defectivechannel server in the first set of channel servers with a channel serverin the second set of channel servers and a defective up-converter in thefirst set of up-converters with an up-converter in the second set ofup-converters.

[0012] A method for providing data-on-demand services comprises thesteps of calculating a delivery matrix of a data file, sending the datafile in accordance with the delivery matrix, such that a large number ofclients is capable of viewing the data file on demand. In oneembodiment, the data file includes a video file.

BRIEF DESCRIPTION OF THE DRAWINGS

[0013]FIG. 1A illustrates an exemplary DOD system in accordance with anembodiment of the invention.

[0014]FIG. 1B illustrates an exemplary DOD system in accordance withanother embodiment of the invention.

[0015]FIG. 2 illustrates an exemplary channel server in accordance withan embodiment of the invention.

[0016]FIG. 3 illustrates an exemplary set-top box in accordance with anembodiment of the invention.

[0017]FIG. 4 illustrates an exemplary process for generating ascheduling matrix in accordance with an embodiment of the invention.

DETAILED DESCRIPTION OF THE INVENTION

[0018]FIG. 1A illustrates an exemplary DOD system 100 in accordance withan embodiment of the invention. In this embodiment, the DOD system 100provides data files, such as video files, on demand. However, the DODsystem 100 is not limited to providing video files on demand but is alsocapable of providing other data files, for example, game files ondemand. The DOD system 100 includes a central controlling server 102, acentral storage 103, a plurality of channel servers 104 a- 104 n, aplurality of up-converters 106 a-106 n, and a combiner/amplifier 108.The central controlling server 102 controls the channel servers 104. Thecentral storage 103 stores data files in digital format. In an exemplaryembodiment, data files stored in the central storage 103 is accessiblevia a standard network interface (e.g., ethernet connection) by anyauthorized computer, such as the central controlling server 102,connected to the network. Each channel server 104 is assigned to achannel and is coupled to an up-converter 106. The channel servers 104provide data files that are retrieved from the central storage 103 inaccordance with instructions from the central controlling server 102.The output of each channel server 104 is a quadrature amplitudemodulation (QAM) modulated intermediate frequency (IF) signal having asuitable frequency for the corresponding up-converter 106. TheQAM-modulated IF signals are dependent upon adopted standards. Thecurrent adopted standard in the United States is thedata-over-cable-systems-interface-specification (DOCSIS) standard, whichrequires an approximately 43.75 MHz IF frequency. The up-converters 106convert IF signals received from the channel servers 104 to radiofrequency signals (RF signals). The RF signals, which include frequencyand bandwidth, are dependent on a desired channel and adopted standards.For example, under the current standard in the United States for a cabletelevision channel 80, the RF signal has a frequency of approximately559.25 MHz and a bandwidth of approximately 6 MHz. The outputs of theup-converters 106 are applied to the combiner/amplifier 108. Thecombiner/amplifier 108 amplifies, conditions, and combines the receivedRF signals then outputs the signals out to a transmission medium 110.

[0019] In an exemplary embodiment, the central controlling server 102includes a graphics user interface (not shown) to enable a serviceprovider to schedule data delivery by a drag-and-drop operation.Further, the central controlling server 102 authenticates and controlsthe channel servers 104 to start or stop according to delivery matrices.In an exemplary embodiment, the central controlling server 102automatically selects a channel and calculates delivery matrices fortransmitting data files in the selected channel. The central controllingserver 102 provides offline addition, deletion, and update of data fileinformation (e.g., duration, category, rating, and/or briefdescription). Further, the central controlling server 102 controls thecentral storage 103 by updating data files and databases stored therein.

[0020] In an exemplary embodiment, an existing cable television system120 may continue to feed signals into the combiner/amplifier 108 toprovide non-DOD services to clients. Thus, the DOD system 100 inaccordance with the invention does not disrupt present cable televisionservices.

[0021]FIG. 1B illustrates another exemplary embodiment of the DOD system100 in accordance with the invention. In addition to the elementsillustrated in FIG. 1A, the DOD system 100 includes a switch matrix 112,a channel monitoring module 114, a set of back-up channel servers 116a-116 b, and a set of back-up up-converters 118 a-118 b. In oneembodiment, the switch matrix 112 is physically located between theup-converters 106 and the combiner/amplifier 108. The switch matrix 112is controlled by the central controlling server 102. The channelmonitoring module 114 comprises a plurality of configured set-top boxes,which simulate potential clients, for monitoring the health of the DODsystem 100. Monitoring results are communicated by the channelmonitoring module 114 to the central controlling server 102. In case ofa channel failure (i.e., a channel server failure, an up-converterfailure, or a communication link failure), the central controllingserver 102 through the switch matrix 112 disengages the malfunctioningcomponent and engages a healthy backup component 116 and/or 118 toresume service.

[0022] In an exemplary embodiment, data files being broadcasted from theDOD system 100 are contained in motion pictures expert group (MPEG)files. Each MPEG file is dynamically divided into data blocks andsub-blocks mapping to a particular portion of a data file along a timeaxis. These data blocks and sub-blocks are sent during a pre-determinedtime in accordance with three-dimensional delivery matrices provided bythe central controlling server 102. A feedback channel is not necessaryfor the DOD system 100 to provide DOD services. However, if a feedbackchannel is available, the feedback channel can be used for otherpurpose, such as billing or providing Internet services.

[0023]FIG. 2 illustrates an exemplary channel server 104 in accordancewith an embodiment of the invention. The channel server 104 comprises aserver controller 202, a CPU 204, a QAM modulator 206, a local memory208, and a network interface 210. The server controller 202 controls theoverall operation of the channel server 104 by instructing the CPU 204to divide data files into blocks (further into sub-blocks and datapackets), select data blocks for transmission in accordance with adelivery matrix provided by the central controlling server 102, encodeselected data, compress encoded data, then deliver compressed data tothe QAM modulator 206. The QAM modulator 206 receives data to betransmitted via a bus (i.e., PCI, CPU local bus) or Ethernetconnections. In an exemplary embodiment, the QAM modulator 206 mayinclude a downstream QAM modulator, an upstream quadrature amplitudemodulation/quadrature phase shift keying (QAM/QPSK) burst demodulatorwith forward error correction decoder, and/or an upstream tuner. Theoutput of the QAM modulator 206 is an IF signal that can be applieddirectly to an up-converter 106.

[0024] The network interface 210 connects the channel server 104 toother channel servers 104 and to the central controlling server 102 toexecute the scheduling and controlling instructions from the centralcontrolling server 102, reporting status back to the central controllingserver 102, and receiving data files from the cental storage 103. Anydata file retrieved from the central storage 103 can be stored in thelocal memory 208 of the channel server 104 before the data file isprocessed in accordance with instructions from the server controller202. In an exemplary embodiment, the channel server 104 may send one ormore DOD data streams depending on the bandwidth of a cable channel(e.g., 6, 6.5, or 8 MHz), QAM modulation (e.g., QAM 64 or QAM 256), anda compression standard/bit rate of the DOD data stream (i.e., MPEG-1 orMPEG-2).

[0025]FIG. 3 illustrates an exemplary set-top box (STB) 300 inaccordance with an embodiment of the invention. The STB 300 comprises aQAM demodulator 302, a CPU 304, a conditional access module 306 (e.g., asmart card system), a local memory 308, a buffer memory 309, a STBcontroller 310, a decoder 312, and a graphics overlay module 314. TheSTB controller 310 controls the overall operation of the STB 300 bycontrolling the CPU 302 and the QAM demodulator 302 to select data inresponse to a client's request, decode selected data, decompress decodeddata, reassemble decoded data, store decoded data in the local memory308 or the buffer memory 309, and deliver stored data to the decoder312. In an exemplary embodiment, the STB controller 310 controls theoverall operation of the STB 300 based on data packet headers in thedata packets received from the transmission medium 110. In an exemplaryembodiment, the local memory 308 comprises non-volatile memory (e.g., ahard drive) and the buffer memory 309 comprises volatile memory.

[0026] In one embodiment, the QAM demodulator 302 comprises transmitterand receiver modules and one or more of the following: privacyencryption/decryption module, forward error correction decoder/encoder,tuner control, downstream and upstream processor, CPU and memoryinterface circuits. The QAM demodulator 302 receives modulated IFsignals, samples and demodulates the signals to restore data.

[0027] The conditional access module 306 permits a decoding process whenaccess is granted after authentication and/or when appropriate fees havebeen charged. Access condition is determined by the service provider.

[0028] In an exemplary embodiment, when access is granted, the decoder312 decodes at least one data block to transform the data block intoimages displayable on an output screen. The decoder 312 supportscommands from a subscribing client, such as play, stop, pause, step,rewind, forward, etc.

[0029] The graphics overlay module 314 enhances displayed graphicsquality by, for example, providing alpha blending or picture-in-picturecapabilities. In an exemplary embodiment, the graphics overlay module314 can be used for graphics acceleration during game playing mode, forexample, when the service provider provides games-on-demand servicesusing the system in accordance with the invention.

[0030] In an exemplary embodiment, although data files are broadcastedto all cable television subscribers, only the DOD subscriber who has acompatible STB 300 will be able to decode and enjoy data-on-demandservices. In one exemplary embodiment, permission to obtain data fileson demand can be obtained via a smart card system in the conditionalaccess control module 306. A smart card may be rechargeable at a localstore or vending machine set up by a service provider. In anotherexemplary embodiment, a flat fee system provides a subscriber anunlimited access to all available data files.

[0031] In an exemplary embodiment, data-on-demand interactive featurespermit a client to select at any time an available data file. The amountof time between when a client presses a select button and the time theselected data file begins playing is referred to as a response time. Asmore resources are allocated (e.g., bandwidth, server capability) toprovide DOD services, the response time gets shorter. In an exemplaryembodiment, a response time can be determined based on an evaluation ofresource allocation and desired quality of service.

[0032] In an exemplary embodiment, a selected response time determinesthe duration of a time slot. The duration of a time slot (TS) is thetime interval for playing a data block at normal speed by a client. Inan exemplary embodiment, a data file, such as a video file, is dividedinto a number of data blocks such that each data block can support theplaying of the data file for the duration of a time slot.

[0033] In one embodiment, the number of data blocks (NUM_OF_BLKS) foreach data file can be calculated as follows:

Estimated_BLK_Size=(DataFile_Size*TS)/DataFile_Length   (1)

BLK SIZE=(Estimated BLK Size+CLUSTER_SIZE−1 Byte)/CLUSTER_SIZE   (2)

BLK_SIZE_BYTES=BLK_SIZE*CLUSTER_SIZE   (3)

NUM_OF_BLKS=(DataFile_Size+BLK_SIZE_BYTES−1 Byte)/BLK_SIZE_BYTES   (4)

[0034] In equations (1) to (4), the Estimated_BLK_Size is an estimatedblock size (in Bytes); the DataFile_Size is the data file size (inBytes); TS represents the duration of a time slot (in seconds);DataFile_Length is the duration of the data file (in seconds); BLK SIZEis the number of clusters needed for each data block; CLUSTER_SIZE isthe size of a cluster in the local memory 208 for each channel server104 (e.g., 64 KBytes); BLK_SIZE_BYTES is a block size in Bytes. In thisembodiment, the number of blocks (NUM_OF_BLKS) is equal to the data filesize (in Bytes) plus a data block size in Bytes minus 1 Byte and dividedby a data block size in Bytes. Equations (1) to (4) illustrate onespecific embodiment. A person of skill in the art would recognize thatother methods are available to calculate a number of data blocks for adata file. For example, dividing a data file into a number of datablocks is primarily a function of an estimated block size and thecluster size of the local memory 208 of a channel server 104. Thus, theinvention should not be limited to the specific embodiment presentedabove.

[0035]FIG. 4 illustrates an exemplary process for generating ascheduling matrix for sending a data file in accordance with anembodiment of the invention. In an exemplary embodiment, this inventionuses time division multiplexing (TDM) and frequency divisionmultiplexing (FDM) technology to compress and schedule data delivery atthe server side. In an exemplary embodiment, a scheduling matrix isgenerated for each data file. In one embodiment, each data file isdivided into a number of data blocks and the scheduling matrix isgenerated based on the number of data blocks. Typically, a schedulingmatrix provides a send order for sending data blocks of a data file froma server to clients, such that the data blocks are accessible insequential order by any client who wishes to access the data file at arandom time.

[0036] At step 402, a number of data blocks (x) for a data file isreceived. A first variable, j, is set to zero (step 404). A referencearray is cleared (step 406). The reference array keeps track of datablocks for internal management purposes. Next, j is compared to x (step408). If j is less than x, a second variable, i, is set to zero (step412). Next, i is compared to x (step 414). If i is less than x, datablocks stored in the column [(i+j) modulo (x)] of a scheduling matrixare written into the reference array (step 418). If the reference arrayalready has such data block(s), do not write a duplicate copy.Initially, since the scheduling matrix does not yet have entries, thisstep can be skipped. Next, the reference array is checked if it containsdata block i (step 420). Initially, since all entries in the referencearray has been cleared at step 406, there would be nothing in thereference array. If the reference array does not contain data block i,data block i is added into the scheduling matrix at matrix position[(i+j) modulo (x), j] and the reference array (step 422). After the datablock i is added to the scheduling matrix and the reference array, i isincremented by 1, such that i=i+1 (step 424), then the process repeatsat step 414 until i=x. If the reference array contains data block i, iis incremented by 1, such that i=i+1 (step 424), then the processrepeats at step 414 until i=x. When i=x, j is incremented by 1, suchthat j=j+1 (step 416) and the process repeats at step 406 until j=x. Theentire process ends when j=x (step 410).

[0037] In an exemplary embodiment, if a data file is divided into sixdata blocks (x=6), the scheduling matrix and the reference arrays are asfollows: Scheduling Matrix (SM) TS0 TS1 TS2 TS3 TS4 TS5 [0, 0] blk0 [1,0] blk1 [2, 0] blk2 [3, 0] blk3 [4, 0] blk4 [5, 0] blk5 [0, 1] [1, 1]blk0 [2, 1] [3, 1] [4, 1] [5, 0] [0, 2] [1, 2] [2, 2] blk0 [3, 2] blk1[4, 2] [5, 1] [0, 3] [1, 3] [2, 3] [3, 3] blk0 [4, 3] [5, 2] blk2 [0, 4][1, 4] blk3 [2, 4] [3, 4] [4, 4] blk0 [5, 3] blk1 [0, 5] [1, 5] [2, 5][3, 5] blk4 [4, 5] [5, 4] blk0

[0038] Reference Array (RA) space0 space1 space2 space3 space4 space5TS0 blk0 blk1 blk2 blk3 blk4 blk5 TS1 blk1 blk0 blk2 blk3 blk4 blk5 TS2blk2 blk0 blk3 blk1 blk4 blk5 TS3 blk3 blk1 blk0 blk4 blk5 blk2 TS4 blk4blk0 blk5 blk2 blk1 blk3 TS5 blk5 blk2 blk1 blk0 blk3 blk4

[0039] Appendix A attached to this application describes a step-by-stepprocess of the exemplary process illustrated in FIG. 4 to generate theabove scheduling matrix and reference arrays. In this exemplaryembodiment, based on the scheduling matrix above, the six data blocks ofthe data file are sent in the following sequence:

[0040] TS0

blk0

[0041] TS1

blk0, blk1, blk3

[0042] TS2

blk0, blk2

[0043] TS3

blk0, blk1, blk3, blk4

[0044] TS4

blk0, blk4

[0045] TS5

blk0, blk1, blk2, blk5

[0046] In another exemplary embodiment, a look-ahead process can be usedto calculate a look-ahead scheduling matrix to send a predeterminednumber of data blocks of a data file prior to a predicted access time.For example, if a predetermined look-ahead time is the duration of onetime slot, for any time slot greater than or equal to time slot numberfour, data block 4 (blk4) of a data file should be received by a STB 300at a subscribing client at or before TS3, but blk4 would not be playeduntil TS4. The process steps for generating a look-ahead schedulingmatrix is substantially similar to the process steps described above forFIG. 4 except that the look-ahead scheduling matrix in this embodimentschedules an earlier sending sequence based on a look-ahead time.Assuming a data file is divided into six data blocks, an exemplarysending sequence based on a look-ahead scheduling matrix, having alook-ahead time of the duration of two time slots, can be represented asfollows:

[0047] TS0

blk0

[0048] TS1

blk0, blk1, blk3, blk4

[0049] TS2

blk0, blk2

[0050] TS3

blk0, blk1, blk3, blk4, blk5

[0051] TS4

blk0, blk5

[0052] TS5

blk0, blk1, blk2

[0053] A three-dimensional delivery matrix for sending a set of datafiles is generated based on the scheduling matrices for each data fileof the set of data files. In the three-dimensional delivery matrix, athird dimension containing IDs for each data file in the set of datafiles is generated. The three-dimensional delivery matrix is calculatedto efficiently utilize available bandwidth in each channel to delivermultiple data streams. In an exemplary embodiment, a convolution method,which is well known in the art, is used to generate a three-dimensionaldelivery matrix to schedule an efficient delivery of a set of datafiles. For example, a convolution method may include the followingpolicies: (1) the total number of data blocks sent in the duration ofany time slot (TS) should be kept at a smallest possible number; and (2)if multiple partial solutions are available with respect to policy (1),the preferred solution is the one which has a smallest sum of datablocks by adding the data blocks to be sent during the duration of anyreference time slot, data blocks to be sent during the duration of aprevious time slot (with respect to the reference time slot), and datablocks to be sent during the duration of a next time slot (with respectto the reference time slot). For example, assuming an exemplary systemsending two short data files, M and N, where each data file is dividedinto six data blocks, the sending sequence based on a scheduling matrixis as follows:

[0054] TS0

blk0

[0055] TS1

blk0, blk1, blk3

[0056] TS2

blk0, blk2

[0057] TS3

blk0, blk1, blk3, blk4

[0058] TS4

blk0, blk4

[0059] TS5

blk0, blk1, blk2, blk5

[0060] Applying the exemplary convolution method as described above,possible combinations of delivery matrices are as follows: Total DataBlocks Option 1: Send video file N at shift 0 TS TS0 => M0, N0 2 TS1 =>M0, M1, M3, N0, N1, N3 6 TS2 => M0, M2, N0, N2 4 TS3 => M0, M1, M3, M4,N0, N1, N3, N4 8 TS4 => M0, M4, N0, N4 4 TS5 => M0, M1, M2, M5, N0, N1,N2, N5 8 Option 2: Send video file N at shift 1 TS TS0 => M0, N0, N1, N34 TS1 => M0, M1, M3, N0, N2 5 TS2 => M0, M2, N0, N1, N3, N4 6 TS3 => M0,M1, M3, M4, N0, N4 6 TS4 => M0, M4, N0, N1, N2, N5 6 TS5 => M0, M1, M2,M5, N0 5 Option 3: Send video file N at shift 2 TS TS0 => M0, N0, N2 3TS1 => M0, M1, M3, N0, N1, N3, N4 7 TS2 => M0, M2, N0, N4 4 TS3 => M0,M1, M3, M4, N0, N1, N2, N5 8 TS4 => M0, M4, N0 3 TS5 => M0, M1, M2, M5,N0, N1, N3 7 Option 4: Send video file N at shift 3 TS TS0 => M0, N0,N1, N3, N4 5 TS1 => M0, M1, M3, N0, N4 5 TS2 => M0, M2, N0, N1, N2, N5 6TS3 => M0, M1, M3, M4, N0 5 TS4 => M0, M4, N0, N1, N3 5 TS5 => M0, M1,M2, M5, N0, N2 6 Option 5: Send video file N at shift 4 TS TS0 => M0,N0, N4 3 TS1 => M0, M1, M3, N0, N1, N2, N5 7 TS2 => M0, M2, N0 3 TS3 =>M0, M1, M3, M4, N0, N1, N3 7 TS4 => M0, M4, N0, N2 4 TS5 => M0, M1, M2,M5, N0, N1, N3, N4 8 Option 6: Send video file N at shift 5 TS TS0 =>M0, N0, N1, N2, N5 5 TS1 => M0, M1, M3, N0 4 TS2 => M0, M2, N0, N1, N3 5TS3 => M0, M1, M3, M4, N0, N2 6 TS4 => M0, M4, N0, N1, N3, N4 6 TS5 =>M0, M1, M2, M5, N0, N4 6

[0061] Applying policy (1), options 2, 4, and 6 have the smallestmaximum number of data blocks (i.e., 6 data blocks) sent during any timeslot. Applying policy (2), the optimal delivery matrix in this exemplaryembodiment is option 4 because option 4 has the smallest sum of datablocks of any reference time slot plus data blocks of neighboring timeslots (i.e., 16 data blocks). Thus, optimally for this embodiment, thesending sequence of the data file N should be shifted by three timeslots. In an exemplary embodiment, a three-dimensional delivery matrixis generated for each channel server 104.

[0062] When data blocks for each data file are sent in accordance with adelivery matrix, a large number of subscribing clients can access thedata file at a random time and the appropriate data blocks of the datafile will be timely available to each subscribing client. In the exampleprovided above, assume the duration of a time slot is equal to 5seconds, the DOD system 100 sends data blocks for data files M and N inaccordance with the optimal delivery matrix (i.e., shift deliverysequence of data file N by three time slots) in the following manner:

[0063] Time 00:00:00

M0 N0 N1 N3 N4

[0064] Time 00:00:05

M0 M1 M3 N0 N4

[0065] Time 00:00:10

M0 M2 N0 N1 N2 N5

[0066] Time 00:00:15

M0 M1 M3 M4 N0

[0067] Time 00:00:20

M0 M4 N0 N1 N3

[0068] Time 00:00:25

M0 M1 M2 M5 N0 N2

[0069] Time 00:00:30

M0 N0N1 N3 N4

[0070] Time 00:00:35

M0 M1 M3 N0 N4

[0071] Time 00:00:40

M0 M2 N0 N1 N2 N5

[0072] Time 00:00:45

M0 M1 M3 M4 N0

[0073] Time 00:00:50

M0 M4 N0 N1 N3

[0074] Time 00:00:55

M0 M1 M2 M5 N0 N2

[0075] If at time 00:00:00 a client A selects movie M, the STB 300 atclient A receives, stores, plays, and rejects data blocks as follows:

[0076] Time 00:00:00

Receive M0

play M0, store M0.

[0077] Time 00:00:05

Receive M1, M3

play M1, store M0, M1, M3.

[0078] Time 00:00:10

Receive M2

play M2, store M0, M1, M2 M3.

[0079] Time 00:00:15

Receive M4

play M3, store M0, M1, M2, M3, M4.

[0080] Time 00:00:20

Receive none

play M4, store M0, M1, M2, M3, M4.

[0081] Time 00:00:25

Receive M5

play M5, store M0, M1, M2, M3, M4, M5.

[0082] If at time 00:00:10, a client B selects movie M, the STB 300 atclient B receives, stores, plays, and rejects data blocks as follows:

[0083] Time 00:00:10

Rcv M0, M2

play M0, store M0, M2.

[0084] Time 00:00:15

Rcv M1, M3, M4

play M1, store M0, M1, M2, M3, M4.

[0085] Time 00:00:20

Rcv none

play M2, store M0, M1, M2, M3, M4.

[0086] Time 00:00:25

Rcv M5

play M3, store M0, M1, M2, M3, M4, M5.

[0087] Time 00:00:30

Rcv none

play M4, store M0, M1, M2, M3, M4, M5.

[0088] Time 00:00:35

Rcv none

play M5, store M0, M1, M2, M3, M4, M5.

[0089] If at time 00:00:15, a client C selects movie N, the STB 300 ofthe client C receives, stores, plays, and rejects data blocks asfollows:

[0090] Time 00:00:15

Rcv N0

play N0, store N0.

[0091] Time 00:00:20

Rcv N1 N3

play N1, store N0, N1, N3.

[0092] Time 00:00:25

Rcv N2

play N2, store N0, N1, N2, N3.

[0093] Time 00:00:30

Rcv N4

play N3, store N0, N1, N2, N3, N4.

[0094] Time 00:00:35

Rcv none

play N4, store N0, N1, N2, N3, N4.

[0095] Time 00:00:40

Rcv N5

play N5, store N0, N1, N2, N3, N4, N5.

[0096] If at time 00:00:30, a client D also selects movie N, the STB 300at the client D receives, stores, plays, and rejects data blocks asfollows:

[0097] Time 00:00:30

Rcv N0, N1, , N3, N4

play N0, store N0, N1, N3, N4.

[0098] Time 00:00:35

Rcv none

play N1, store N0, N1, N3, N4.

[0099] Time 00:00:40

Rcv N2, N5

play N2, store N0, N1, N2, N3, N4, N5.

[0100] Time 00:00:45

Rcv none

play N3, store N0, N1, N2, N3, N4, N5.

[0101] Time 00:00:50

Rcv none

play N4, store N0, N1, N2, N3, N4, N5.

[0102] Time 00:00:55

Rcv none

play N5, store N0, N1, N2, N3, N4, N5.

[0103] As shown in the above examples, any combination of clients can ata random time independently select and begin playing any data fileprovided by the service provider.

GENERAL OPERATION

[0104] A service provider can schedule to send a number of data files(e.g., video files) to channel servers 104 prior to broadcasting. Thecentral controlling server 102 calculates and sends to the channelservers 104 three-dimensional delivery matrices (ID, time slot, and datablock send order). During broadcasting, channel servers 104 consult thethree-dimensional delivery matrices to send appropriate data blocks inan appropriate order. Each data file is divided into data blocks so thata large number of subscribing clients can separately begin viewing adata file continuously and sequentially at a random time. The size of adata block of a data file is dependent on the duration of a selectedtime slot and the bit rate of the data stream of the data file. Forexample, in a constant bit rate MPEG data stream, each data block has afixed size of:

Block Size (MBytes)=BitRate (Mb/s)×TS (sec)/8   (1).

[0105] In an exemplary embodiment, a data block size is adjusted to anext higher multiple of a memory cluster size in the local memory 208 ofa channel server 104. For example, if a calculated data block length is720 Kbytes according to equation (1) above, then the resulting datablock length should be 768 Kbytes if the cluster size of the localmemory 208 is 64 Kbytes. In this embodiment, data blocks should befurther divided into multiples of sub-blocks each having the same sizeas the cluster size. In this example, the data block has twelvesub-blocks of 64 KBytes.

[0106] A sub-block can be further broken down into data packets. Eachdata packet contains a packet header and packet data. The packet datalength depends on the maximum transfer unit (MTU) of a physical layerwhere each channel server's CPU sends data to. In the preferredembodiment, the total size of the packet header and packet data shouldbe less than the MTU. However, for maximum efficiency, the packet datalength should be as long as possible.

[0107] In an exemplary embodiment, data in a packet header containsinformation that permits the subscriber client's STB 300 to decode anyreceived data and determine if the data packet belongs to a selecteddata file (e.g., protocol signature, version, ID, or packet typeinformation). The packet header may also contain other information, suchas block/sub-block/packet number, packet length, cyclic redundancy check(CRC) and offset in a sub-block, and/or encoding information.

[0108] Once received by a channel server 104, data packets are sent tothe QAM modulator 206 where another header is added to the data packetto generate a QAM-modulated IF output signal. The maximum bit rateoutput for the QAM modulator 206 is dependent on available bandwidth.For example, for a QAM modulator 206 with 6 MHz bandwidth, the maximumbit rate is 5.05 (bit/symbol)×6 (MHz)=30.3 Mbit/sec.

[0109] The QAM-modulated IF signals are sent to the up-converters 106 tobe converted to RF signals suitable for a specific channel (e.g., forCATV channel 80, 559.250 MHz and 6 MHz bandwidth). For example, if acable network has high bandwidth (or bit rate), each channel can be usedto provide more than one data stream, with each data stream occupying avirtual sub-channel. For example, three MPEG1 data streams can fit intoa 6 MHz channel using QAM modulation. The output of the up-converters106 is applied to the combiner/amplifier 108, which sends the combinedsignal to the transmission medium 110.

[0110] In an exemplary embodiment, the total system bandwidth (BW) fortransmitting “N” data streams is BW=N×bw, where bw is the requiredbandwidth per data stream. For example, three MPEG-1 data streams can betransmitted at the same time by a DOCSIS cable channel having a systembandwidth of 30.3 Mbits/sec because each MPEG- 1 data stream occupies 9Mbits/sec of the system bandwidth.

[0111] Typically, bandwidth is consumed regardless of the number ofsubscribing clients actually accessing the DOD service. Thus, even if nosubscribing client is using the DOD service, bandwidth is still consumedto ensure the on-demand capability of the system.

[0112] The STB 300, once turned on, continuously receives and updates aprogram guide stored in the local memory 308 of a STB 300. In anexemplary embodiment, the STB 300 displays data file informationincluding the latest program guide on a TV screen. Data fileinformation, such as video file information, may include movieID, movietitle, description (in multiple languages), category (e.g., action,children), rating (e.g., R, PG13), cable company policy (e.g., price,length of free preview), subscription period, movie poster, and moviepreview. In an exemplary embodiment, data file information is sent via areserved physical channel, such as a channel reserved for firmwareupdate, commercials, and/or emergency information. In another exemplaryembodiment, information is sent in a physical channel shared by otherdata streams.

[0113] A subscribing client can view a list of available data filesarranged by categories displayed on a television screen. When the clientselects one of the available data files, the STB 300 controls itshardware to tune into a corresponding physical channel and/or a virtualsub-channel to start receiving data packets for that data file. The STB300 examines every data packet header, decodes data in the data packets,and determines if a received data packet should be retained. If the STB300 determines that a data packet should not be retained, the datapacket is discarded. Otherwise, the packet data is saved in the localmemory 308 for later retrieval or is temporarily stored in the buffermemory 309 until it is sent to the decoder 312.

[0114] To improve performance efficiency by avoiding frequent read/writeinto the local memory 308, in an exemplary embodiment, the STB 300 usesa “sliding window” anticipation technique to lock anticipated datablocks in the memory buffer 309 whenever possible. Data blocks aretransferred to the decoder 312 directly out of the memory buffer 309 ifa hit in an anticipation window occurs. If an anticipation miss occurs,data blocks are read from the local memory 308 into the memory buffer309 before the data blocks are transferred to the decoder 312 from thememory buffer 309.

[0115] In an exemplary embodiment, the STB 300 responds to subscribingclient's commands via infrared (IR) remote control unit buttons, an IRkeyboard, or front panel pushbuttons, including buttons to pause, playin slow motion, rewind, zoom and single step. In an exemplaryembodiment, if a subscribing client does not input any action for apredetermined period of time (e.g., scrolling program menu, or selectinga category or movie), a scheduled commercial is played automatically.The scheduled commercial is automatically stopped when the subscribingclient provides an action (e.g., press a button in a remote controlunit). In another exemplary embodiment, the STB 300 can automaticallyinsert commercials while a video is being played. The service provider(e.g., a cable company) can set up a pricing policy that dictates howfrequently commercials should interrupt the video being played.

[0116] If an emergency information bit is found in a data packet header,the STB 300 pauses any data receiving operation and controls itshardware to tune into the channel reserved for receiving data fileinformation to obtain and decode any emergency information to bedisplayed on an output screen. In an exemplary embodiment, when the STB300 is idled, it is tuned to the channel reserved for receiving datafile information and is always ready to receive and display anyemergency information without delay.

[0117] The foregoing examples illustrate certain exemplary embodimentsof the invention from which other embodiments, variations, andmodifications will be apparent to those skilled in the art. Theinvention should therefore not be limited to the particular embodimentsdiscussed above, but rather is defined by the following claims.

APPENDIX A Systems and Methods for Providing Video-On-Demand Servicesfor Broadcasting Systems

[0118] The following is a step-by-step description of the exemplaryprocess illustrated in FIG. 4 for generating a scheduling matrix for adata file having six data blocks:

[0119] START

[0120] (Step 402) Receive a number of data blocks for a data file (x);assume the number of data blocks is equal to 6 (x=6).

[0121] (Step 404) Set j=0

[0122] (Step 406) Clear a Reference Array (RA)

[0123] (Step 408) Compare j to x.

[0124] (Step 412) j is less than x (0<6), let i=0

[0125] (Step 414) Compare i to x.

[0126] (Step 418) i is less than x (0<6). Read matrix positions ofcolumn [0] in the SM and write to RA; initially, the SM is empty sonothing is written into RA.

[0127] (Step 420) Does RA contain data block i or blk0?

[0128] (Step 422) RA does not contain anything because it is empty.Write blk0 into position [0, 0] in SM and the RA.

[0129] (Step 424) Add 1 to i (i=1) to derive value for position [1, 0].Go back to Step 414.

[0130] (Step 414) Compare i to x.

[0131] (Step 418) i is less than x (1<6). Read matrix positions ofcolumn [1] in the SM and write to RA; initially, the SM is empty sonothing is written into RA.

[0132] (Step 420) Does RA contain data block i or blk1?

[0133] (Step 422) RA does not contain blk1. Write blk1 into position [1,0] in SM and the RA.

[0134] (Step 424) Add 1 to i (i=2) to derive value for position [2, 0].Go back to Step 414.

[0135] (Step 414) Compare i to x.

[0136] (Step 418) i is less than x (2<6). Read matrix positions ofcolumn [2] in the SM and write to RA; initially, the SM is empty sonothing is written into RA.

[0137] (Step 420) Does RA contain data block i or blk2?

[0138] (Step 422) RA does not contain blk2. Write blk2 into position [2,0] in SM and the RA.

[0139] (Step 424) Add 1 to i (i=3) to derive value for position [3, 0].Go back to Step 414.

[0140] (Step 414) Compare i to x.

[0141] (Step 418) i is less than x (3<6). Read matrix positions ofcolumn [3] in the SM and write to RA; initially, the SM is empty sonothing is written into RA.

[0142] (Step 420) Does RA contain data block i or blk3?

[0143] (Step 422) RA does not contain blk3. Write blk3 into position [3,0] in SM and the RA.

[0144] (Step 424) Add 1 to i (i=4) to derive value for position [4, 0].Go back to Step 414.

[0145] (Step 414) Compare i to x.

[0146] (Step 418) i is less than x (4<6). Read matrix positions ofcolumn [4] of the SM and write to RA; initially, the SM is empty sonothing is written into RA.

[0147] (Step 420) Does RA contain data block i or blk4?

[0148] (Step 422) RA does not contain blk4. Write blk4 into position [4,0] in SM and the RA.

[0149] (Step 424) Add 1 to i (i=5) to derive value for position [5, 0].Go back to Step 414.

[0150] (Step 414) Compare i to x.

[0151] (Step 418) i is less than x (5<6). Read matrix positions ofcolumn [5] of the SM and write to RA; initially, the SM is empty sonothing is written into RA.

[0152] (Step 420) Does RA contain data block i or blk5?

[0153] (Step 422) RA does not contain blk5. Write blk5 into position [5,0] in SM and the RA.

[0154] (Step 424) Add 1 to i (i=6). Go back to Step 414.

[0155] (Step 414) Compare i to x.

[0156] (Step 416) i is equal to x (6=6). Increment j by 1 (j=1). Go toStep 406.

[0157] (Step 406) Clear a Reference Array (RA)

[0158] (Step 408) Compare j to x.

[0159] (Step 412) j is less than x (1<6), let i=0.

[0160] (Step 414) Compare i to x.

[0161] (Step 418) i is less than x (0<6). Read matrix positions ofcolumn [1] in the SM and write to RA. Position [1, 0] contains blk 1;thus, blk 1 is written into RA. All other positions are empty.

[0162] (Step 420) Does RA contain data block i or blk0?

[0163] (Step 422) RA does not contain blk0. Write blk0 into position [1,1] in the SM and the RA. RA now has blk1 and blk 0.

[0164] (Step 424) Add 1 to i (i=1) to derive value for position [2, 1].Go back to Step 414.

[0165] (Step 414) Compare i to x.

[0166] (Step 418) i is less than x (1<6). Read matrix positions ofcolumn [2] in the SM and write to RA. Position [2, 0] contains blk 2.All other positions are empty. RA now has blk1, blk 0, and blk 2.

[0167] (Step 420) Does RA contain data block i or blk1?

[0168] (Step 424) RA contains blk1. Thus, nothing is written intoposition [2, 1]. Add 1 to i (i=2) to derive value for position [3, 1].Go back to Step 414.

[0169] (Step 414) Compare i to x.

[0170] (Step 418) i is less than x (2<6). Read matrix positions incolumn [3] of the SM and write to RA. Position [3, 0] contains blk3. Allother positions are empty. RA now has blk1, blk0, blk2, and blk3.

[0171] (Step 420) Does RA contain data block i or blk2?

[0172] (Step 424) RA does contain blk2. Thus, nothing is written intoposition [3, 1]. Add 1 to i (i=3) to derive value for position [4, 1].Go back to Step 414.

[0173] (Step 414) Compare i to x.

[0174] (Step 418) i is less than x (3<6). Read matrix positions ofcolumn [4] in the SM and write to RA. Position [4, 0] contains blk4. Allother positions are empty. RA now has blk1, blk0, blk2, blk3, and blk4.

[0175] (Step 420) Does RA contain data block i or blk3?

[0176] (Step 424) RA does contain blk3. Thus, nothing is written intoposition [4, 1]. Add 1 to i (i=4) to derive value for position [5, 1].Go back to Step 414.

[0177] (Step 414) Compare i to x.

[0178] (Step 418) i is less than x (4<6). Read matrix positions ofcolumn [5] in the SM and write to RA. Position [5, 0] contains blk5. Allother positions are empty. RA now has blk1, blk0, blk2, blk3, blk4, andblk5.

[0179] (Step 420) Does RA contain data block i or blk4?

[0180] (Step 424) RA does contain blk4. Thus, nothing is written intoposition [5, 1]. Add 1 to i (i=5) to derive value for position [0, 1].Go back to Step 414.

[0181] (Step 414) Compare i to x.

[0182] (Step 418) i is less than x (5<6). Read matrix positions ofcolumn [0] in the SM and write to RA. Position [0, 0] contains blk0. Allother positions are empty. RA already contains blk0; thus, blk0 isdiscarded.

[0183] (Step 420) Does RA contain data block i or blk5?

[0184] (Step 424) RA does contain blk5. Thus, nothing is written intoposition [0, 1]. Add 1 to i (i=6). Go back to Step 414.

[0185] (Step 414) Compare i to x.

[0186] (Step 416) i is equal to x (6=6). Increment j by 1 (j=2). Go toStep 406.

[0187] (Step 406) Clear a Reference Array (RA)

[0188] (Step 408) Compare j to x.

[0189] (Step 412) j is less than x (2<6), let i=0.

[0190] (Step 414) Compare i to x.

[0191] (Step 418) i is less than x (0<6). Read matrix positions ofcolumn [2] in the SM and write to RA. Position [2, 0] contains blk 2.All other positions are empty. RA now has blk2.

[0192] (Step 420) Does RA contain data block i or blk0?

[0193] (Step 422) RA does not contain blk0. Write blk0 into position [2,2] in the SM and the RA. RA now has blk2 and blk 0.

[0194] (Step 424) Add 1 to i (i=1) to derive value for position [3, 2].Go back to Step 414.

[0195] (Step 414) Compare i to x.

[0196] (Step 418) i is less than x (1<6). Read matrix positions ofcolumn [3] in the SM and write to RA. Position [3, 0] contains blk3. Allother positions are empty. RA now has blk2, blk 0, and blk 3.

[0197] (Step 420) Does RA contain data block i or blk1?

[0198] (Step 422) RA not contain blk1. Write blk1 into position [3, 2]in the SM and the RA. RA now has blk2, blk0, blk3, and blk1.

[0199] (Step 424) Add 1 to i (i=2) to derive value for position [4, 2].Go back to Step 414.

[0200] (Step 414) Compare i to x.

[0201] (Step 418) i is less than x (2<6). Read matrix positions ofcolumn [4] in the SM and write to RA. Position [4, 0] contains blk4. Allother positions are empty. RA now has blk2, blk0, blk3, blk1, and blk4.

[0202] (Step 420) Does RA contain data block i or blk2?

[0203] (Step 424) RA does contain blk2. Thus, nothing is written intoposition [4, 2]. Add 1 to i (i=3) to derive value for position [5, 2].Go back to Step 414.

[0204] (Step 414) Compare i to x.

[0205] (Step 418) i is less than x (3<6). Read matrix positions ofcolumn [5] in the SM and write to RA. Position [5, 0] contains blk5. Allother positions are empty. RA now has blk2, blk0, blk3, blk1, blk4, andblk5.

[0206] (Step 420) Does RA contain data block i or blk3?

[0207] (Step 424) RA does contain blk3. Thus, nothing is written intoposition [5, 2]. Add 1 to i (i=4) to derive value for position [0, 2].Go back to Step 414.

[0208] (Step 414) Compare i to x.

[0209] (Step 418) i is less than x (4<6). Read matrix positions ofcolumn [0] in the SM and write to RA. Position [0, 0] contains blk0. Allother positions are empty. RA already contain blk0; thus, blk0 isdiscarded.

[0210] (Step 420) Does RA contain data block i or blk4?

[0211] (Step 424) RA does contain blk4. Thus, nothing is written intoposition [0, 2]. Add 1 to i (i=5) to derive value for position [1, 2].Go back to Step 414.

[0212] (Step 414) Compare i to x.

[0213] (Step 418) i is less than x (5<6). Read matrix positions ofcolumn [1] in the SM and write to RA. Position [1, 0] contains blk1 andposition [1, 1] contains blk0. RA already contains blk1 and blk0; thus,blk1 and blk0 are discarded. All other positions are empty.

[0214] (Step 420) Does RA contain data block i or blk5?

[0215] (Step 424) RA does contain blk5. Thus, nothing is written intoposition [1, 2]. Add 1 to i (i=6). Go back to Step 414.

[0216] (Step 414) Compare i to x.

[0217] (Step 416) i is equal to x (6=6). Increment j by 1 (j=3). Go toStep 406.

[0218] (Step 406) Clear a Reference Array (RA)

[0219] (Step 408) Compare j to x.

[0220] (Step 412) j is less than x (3<6), let i=0.

[0221] (Step 414) Compare i to x.

[0222] (Step 418) i is less than x (0<6). Read matrix positions ofcolumn [3] in the SM and write to RA. Position [3, 0] contains blk3 andposition [3, 2] contains blk1. Blk3 and blk1 are written into RA. Allother positions are empty.

[0223] (Step 420) Does RA contain data block i or blk0?

[0224] (Step 422) RA does not contain blk0. Write blk0 into position [3,3] in the SM and the RA. RA now has blk3, blk1, and blk0.

[0225] (Step 424) Add 1 to i (i=1) to derive value for position [4, 3].Go back to Step 414.

[0226] (Step 414) Compare i to x.

[0227] (Step 418) i is less than x (1<6). Read matrix positions ofcolumn [4] in the SM and write to RA. Position [4, 0] contains blk 4.All other positions are empty. RA now has blk3, blk 1, blk 0 and blk 4.

[0228] (Step 420) Does RA contain data block i or blk1?

[0229] (Step 424) RA contains blk1. Thus, nothing is written intoposition [4, 3]. Add 1 to i (i=2) to derive value for position [5, 3].Go back to Step 414.

[0230] (Step 414) Compare i to x.

[0231] (Step 418) i is less than x (2<6). Read matrix positions ofcolumn [5] in the SM and write to RA. Position [5, 0] contains blk5. Allother positions are empty. RA now has blk3, blk1, blk0, blk4, and blk5.

[0232] (Step 420) Does RA contain data block i or blk2?

[0233] (Step 422) RA does not contain blk2. Write blk2 into position [5,3] in the SM and the RA. RA now has blk3, blk1, blk0, blk4, blk5, andblk2.

[0234] (Step 424) Add 1 to i (i=3) to derive value for position [0, 3].Go back to Step 414.

[0235] (Step 414) Compare i to x.

[0236] (Step 418) i is less than x (3<6). Read matrix positions ofcolumn [0] in the SM and write to RA. Position [0, 0] contains blk0. Allother positions are empty. RA already contains blk0; thus, discard blk0.

[0237] (Step 420) Does RA contain data block i or blk3?

[0238] (Step 424) RA does contain blk3. Thus, nothing is written intoposition [0, 3]. Add 1 to i (i=4) to derive value for position [1, 3].Go back to Step 414.

[0239] (Step 414) Compare i to x.

[0240] (Step 418) i is less than x (4<6). Read matrix positions ofcolumn [1] in the SM and write to RA. Position [1, 0] contains blk1 andposition [1, 1] contains blk0. All other positions are empty. RA alreadycontains blk 1 and blk0; do not write a duplicate copy.

[0241] (Step 420) Does RA contain data block i or blk4?

[0242] (Step 424) RA does contain blk4. Thus, nothing is written intoposition [1, 3]. Add 1 to i (i=5) to derive value for position [2, 3].Go back to Step 414.

[0243] (Step 414) Compare i to x.

[0244] (Step 418) i is less than x (5<6). Read matrix positions ofcolumn [2] in the SM and write to RA. Position [2, 0] contains blk2 andposition [2, 2] contains blk 0. All other positions are empty. RAalready contains blk2 and blk0; do not write a duplicate copy.

[0245] (Step 420) Does RA contain data block i or blk5?

[0246] (Step 424) RA does contain blk5. Thus, nothing is written intoposition [2, 3]. Add 1 to i (i=6). Go back to Step 414.

[0247] (Step 414) Compare i to x.

[0248] (Step 416) i is equal to x (6=6). Increment j by 1 (j=4). Go toStep 406.

[0249] (Step 406) Clear a Reference Array (RA)

[0250] (Step 408) Compare j to x.

[0251] (Step 412) j is less than x (4<6), let i=0.

[0252] (Step 414) Compare i to x.

[0253] (Step 418) i is less than x (0<6). Read matrix positions ofcolumn [4] in the SM and write to RA. Position [4, 0] contains blk4.Blk4 is written into RA. All other positions are empty.

[0254] (Step 420) Does RA contain data block i or blk0?

[0255] (Step 422) RA does not contain blk0. Write blk0 into position [4,4] in the SM and the RA. RA now has blk4 and blk0.

[0256] (Step 424) Add 1 to i (i=1) to derive value for position [5, 4].Go back to Step 414.

[0257] (Step 414) Compare i to x.

[0258] (Step 418) i is less than x (1<6). Read matrix positions ofcolumn [5] in the SM and write to RA. Position [5, 0] contains blk5 andposition [5, 3]contains blk2. All other positions are empty. RA now hasblk4, blk0, blk 5, and blk2.

[0259] (Step 420) Does RA contain data block i or blk1 ?

[0260] (Step 422) RA does not contain blk1. Write blk1 into position [5,4] of the SM and the RA. RA now has blk4, blk0, blk5, blk2, and blk1.

[0261] (Step 424) Add 1 to i (i=2) to derive value for position [0, 4].Go back to Step 414.

[0262] (Step 414) Compare i to x.

[0263] (Step 418) i is less than x (2<6). Read matrix positions ofcolumn [0] in the SM and write to RA. Position [0, 0] contains blk0. Allother positions are empty. RA already contains blk0; thus, do not writea duplicate copy.

[0264] (Step 420) Does RA contain data block i or blk2?

[0265] (Step 424) RA does contain blk2. Add 1 to i (i=3) to derive valuefor position [1, 4]. Go back to Step 414.

[0266] (Step 414) Compare i to x.

[0267] (Step 418) i is less than x (3<6). Read matrix positions ofcolumn [1] in the SM and write to RA. Position [1, 0] contains blk1 andposition [1, 1] contains blk0. All other positions are empty. RA alreadycontains blk1 and blk0; do not write a duplicate copy.

[0268] (Step 420) Does RA contain data block i or blk3?

[0269] (Step 422) RA does not contain blk3. Write blk3 into position [1,4] of the SM and the RA. RA now has blk4, blk0, blk5, blk2, blk1, andblk3.

[0270] (Step 424) Add 1 to i (i=4) to derive value for position [2, 4].Go back to Step 414.

[0271] (Step 414) Compare i to x.

[0272] (Step 418) i is less than x (4<6). Read matrix positions ofcolumn [2] in the SM and write to RA. Position [2, 0] contains blk2 andposition [2, 2] contains blk0. All other positions are empty. RA alreadycontains blk2 and blk0; do not write a duplicate copy.

[0273] (Step 420) Does RA contain data block i or blk4?

[0274] (Step 424) RA does contain blk4. Thus, nothing is written intoposition [2, 4]. Add 1 to i (i=5) to derive value for position [3, 4].Go back to Step 414.

[0275] (Step 414) Compare i to x.

[0276] (Step 418) i is less than x (5<6). Read matrix positions ofcolumn [3] in the SM and write to RA. Position [3, 0] contains blk3,position [3, 2] contains blk1, and position [3, 3] contains blk0. Allother positions are empty. RA already contains blk3, blk1, and blk0; donot write a duplicate copy.

[0277] (Step 420) Does RA contain data block i or blk5?

[0278] (Step 424) RA does contain blk5. Thus, nothing is written intoposition [3, 4]. Add 1 to i (i=6). Go back to Step 414.

[0279] (Step 414) Compare i to x.

[0280] (Step 416) i is equal to x (6=6). Increment j by 1 (j=5). Go toStep 406.

[0281] (Step 406) Clear a Reference Array (RA)

[0282] (Step 408) Compare j to x.

[0283] (Step 412)j is less than x (5<6), let i=0.

[0284] (Step 414) Compare i to x.

[0285] (Step 418) i is less than x (0<6). Read matrix positions ofcolumn [5] in the SM and write to RA. Position [5, 0] contains blk5,position [5, 3] contains blk2, and position [5, 4] contains blk1. Blk5,blk2, and blk1 are written into RA. All other positions are empty.

[0286] (Step 420) Does RA contain data block i or blk0?

[0287] (Step 422) RA does not contain blk0. Write blk0 into position [5,5] in the SM and the RA. RA now has blk5, blk2, blk1, and blk0.

[0288] (Step 424) Add 1 to i (i=1) to derive value for position [0, 5].Go back to Step 414.

[0289] (Step 414) Compare i to x.

[0290] (Step 418) i is less than x (1<6). Read matrix positions ofcolumn [0] in the SM and write to RA. Position [0, 0] contains blk0 andall other positions are empty. RA now has blk5, blk2, blk1, and blk0.

[0291] (Step 420) Does RA contain data block i or blk1?

[0292] (Step 424) RA does contain blk1. Add 1 to i (i=2) to derive valuefor position [1, 5]. Go back to Step 414.

[0293] (Step 414) Compare i to x.

[0294] (Step 418) i is less than x (2<6). Read matrix positions ofcolumn [1] in the SM and write to RA. Position [1, 0] contains blk 1,position [1, 1] contains blk0, and position [1, 4] contains blk3. Allother positions are empty. RA already contains blk0 and blk1; thus, donot write a duplicate copy. Write blk3 into RA. RA now has blk5, blk2,blk2, blk1, blk0, and blk3.

[0295] (Step 420) Does RA contain data block i or blk2?

[0296] (Step 424) RA does contain blk2. Add 1 to i (i=3) to derive valuefor position [2, 5]. Go back to Step 414.

[0297] (Step 414) Compare i to x.

[0298] (Step 418) i is less than x (3<6). Read matrix positions ofcolumn [2] in the SM and write to RA. Position [2, 0] contains blk2 andposition [2, 2] contains blk0. All other positions are empty. RA alreadycontains blk2 and blk0; do not write a duplicate copy.

[0299] (Step 420) Does RA contain data block i or blk3?

[0300] (Step 424) RA does contain blk3. Add 1 to i (i=4) to derive valuefor position [3, 5]. Go back to Step 414.

[0301] (Step 414) Compare i to x.

[0302] (Step 418) i is less than x (4<6). Read matrix positions column[3] in the SM and write to RA. Position [3, 0] contains blk3, position[3, 2] contains blk1, position [3, 3] contains blk0. All other positionsare empty. RA already contains blk3, blk1, and blk0; do not write aduplicate copy.

[0303] (Step 420) Does RA contain data block i or blk4?

[0304] (Step 422) RA does not contain blk4. Write blk4 into position [3,5] of the SM and the RA. The RA now has blk5, blk2, blk1, blk0, blk3,and blk4.

[0305] (Step 424) Add 1 to i (i=5) to derive value for position [4, 5].Go back to Step 414.

[0306] (Step 414) Compare i to x.

[0307] (Step 418) i is less than x (5<6). Read matrix positions ofcolumn [4] in the SM and write to RA. Position [4, 0] contains blk4 andposition [4, 4] contains blk0. All other positions are empty. RA alreadycontains blk4 and blk0; do not write a duplicate copy.

[0308] (Step 420) Does RA contain data block i or blk5?

[0309] (Step 424) RA does contain blk5. Thus, nothing is written intoposition [3, 4].

[0310] (Step 424) Add 1 to i (i=6). Go back to Step 414.

[0311] (Step 414) Compare i to x.

[0312] (Step 416) i is equal to x (6=6). Increment j by 1 (j=5). Go toStep 406.

[0313] (Step 406) Clear a Reference Array (RA)

[0314] (Step 408) Compare j to x.

[0315] (Step 410) j is equal to x (6=6); END.

1. A method for generating a scheduling matrix for data file, andscheduling matrix provides a send order for sending data blocks for adata file, such that said data blocks are available in sequential orderto a client receiving said data blocks, said method comprising the stepsof: (a) receiving a number of data blocks [x] for a data file; (b)setting a first variable [i] to zero; (c) setting a second variable [i]to zero; (d) clearing all entries in a reference array; (e) writing atleast one data block stored in matrix positions of a column [(i+j)modulo x] in a matrix to a reference array, if said reference array doesnot already contain said data block; (f) writing a data block [i] intosaid reference array and a matrix position [(i+j) modulu x,j] of saidmatrix, if said reference array does not contains aid data block [i];(g) incrementing said second variable [i] is equal to said number ofdata blocks [x]; and ((h) incrementing said first variable [j] by oneand repeating said step (c) until said first variable [j] is equal tosaid number of data blocks [x].
 2. The method of claim 1, furthercomprising the steps of: (i) repeating said steps (a) to (h) to generatea set of scheduling matrices for a set of data files; and (j) applying aconvolution method to generate a delivery matrix based on said set ofscheduling matrices for sending said set of data files.
 3. A method forcalculating a delivery matrix, said delivery matrix provides a sendorder for sending data blocks of a set of data files, said methodcomprising the step of: (a) calculating a scheduling matrix for eachdata file in a set of data files to form a set of scheduling matrices;(b) generating an identification array containing an identification foreach of said set of data files; and (c) combining said set of schedulingmatrices and said identification array to generate a delivery matrix forsaid set of data files.
 4. The method of claim 3, wherein saidcalculating step includes the step of: (i) generating an arraycontaining a set of time slots for each data file; and (ii) generatingan array contain at least one data block of a data file to be sentduring each time slot.
 5. The method of claim 3, wherein said combiningincludes the step of using a convolution method.
 6. A computerimplemented on-demand data broadcast method comprising the act ofpreparing a delivery matrix defining a data transmission sequencesuitable for broadcast, to a plurality of clients, on-demand data in anon client specific manner, whereby transmission of said on-demand datafiles requires an amount of transmission bandwidth that is independentof the number of said plurality of clients.
 7. A computer implementedmethod as recited in claim 6, wherein the act of generating a deliverymatrix comprises the act of: preparing a first scheduling matrixsuitable for transmission of a first data file, said first data filebeing represented by a first plurality of data blocks, said firstscheduling matrix providing a first sequence for transmitting said firstplurality of data blocks sequentially within time slots in a manner suchthat any client receiving transmission of said first data file accordingto said first scheduling matrix may begin accessing said first data filewithin one time slot.
 8. A computer implemented method as recited inclaim 7, wherein the act of preparing a delivery matrix further includesthe acts of: preparing a second scheduling matrix suitable fortransmission of a second data file, said second data file beingrepresented by a second plurality of data blocks, said second schedulingmatrix providing a second sequence for transmitting said secondplurality f data blocks sequentially within time slots in a manner suchthat any client receiving transmission of said second data fileaccording to said second scheduling matrix may being accessing saidsecond data file within one timeslot; and generating said deliverymatrix through a combination of said first and second schedulingmatrices.
 9. A computer implemented universal data broadcast method asrecited in claim 6 further comprising the act of preparing an electronicprogram guide (EPG) suitable for broadcast to said plurality of clients.10. A computer implemented method as recited in claim 6, wherein saidon-demand data includes video data.
 11. A computer implemented method asrecited in claim 6, wherein said on-demand data includes game data.